home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-MIPS / SHMIQ.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  6KB  |  226 lines

  1. /*
  2.  * Please note that the comments on this file may be out of date
  3.  * and that they represent what I have figured about the shmiq device
  4.  * so far in IRIX.
  5.  *
  6.  * This also contains some streams and idev bits.
  7.  *
  8.  * They may contain errors, please, refer to the source code of the Linux  
  9.  * kernel for a definitive answer on what we have implemented
  10.  *
  11.  * Miguel.
  12.  */
  13.  
  14. /* STREAMs ioctls */
  15. #define STRIOC    ('S' << 8)
  16. #define I_STR     (STRIOC | 010)
  17. #define I_PUSH    (STRIOC | 02)
  18. #define I_LINK    (STRIOC | 014)
  19. #define I_UNLINK  (STRIOC | 015)
  20.  
  21. /* Data structure passed on I_STR ioctls */
  22. struct strioctl {
  23.         int     ic_cmd;                 /* streams ioctl command */
  24.         int     ic_timout;              /* timeout */
  25.         int     ic_len;                 /* lenght of data */
  26.         void    *ic_dp;                 /* data */
  27. };
  28.  
  29. /*
  30.  * For mapping the shared memory input queue, you have to:
  31.  *
  32.  * 1. Map /dev/zero for the number of bytes you want to use
  33.  *    for your shared memory input queue plus the size of the
  34.  *    sharedMemoryInputQueue structure + 4 (I still have not figured
  35.  *    what this one is for
  36.  *
  37.  * 2. Open /dev/shmiq
  38.  *
  39.  * 3. Open /dev/qcntlN N is [0..Nshmiqs]
  40.  *
  41.  * 4. Fill a shmiqreq structure.  user_vaddr should point to the return
  42.  *    address from the /dev/zero mmap.  Arg is the number of shmqevents
  43.  *    that fit into the /dev/zero region (remember that at the beginning there
  44.  *    is a sharedMemoryInputQueue header).
  45.  *
  46.  * 5. Issue the ioctl (qcntlfd, QIOCATTACH, &your_shmiqreq);
  47.  */
  48.  
  49. struct shmiqreq {
  50.     char *user_vaddr;
  51.     int  arg;
  52. };
  53.  
  54. /* map the shmiq into the process address space */
  55. #define QIOCATTACH       _IOW('Q',1,struct shmiqreq)
  56.  
  57. /* remove mappings */
  58. #define QIOCDETACH       _IO('Q',2)
  59.  
  60. /*
  61.  * A shared memory input queue event.
  62.  */
  63. struct shmqdata {
  64.     unsigned char device;          /* device major */
  65.         unsigned char which;           /* device minor */
  66.         unsigned char type;            /* event type */
  67.         unsigned char flags;           /* little event data */
  68.         union {
  69.             int pos;                   /* big event data */
  70.             short ptraxis [2];         /* event data for PTR events */
  71.         } un;
  72. };
  73.  
  74. /* indetifies the shmiq and the device */
  75. struct shmiqlinkid {
  76.         short int devminor;
  77.         short int index;
  78. };
  79.  
  80. struct shmqevent {
  81.     union {
  82.                 int time;
  83.                 struct shmiqlinkid id;
  84.         } un ;
  85.         struct shmqdata data ;
  86. };
  87.  
  88. /*
  89.  * sharedMemoryInputQueue: this describes the shared memory input queue.
  90.  *
  91.  * head   is the user index into the events, user can modify this one.
  92.  * tail   is managed by the kernel.
  93.  * flags  is one of SHMIQ_OVERFLOW or SHMIQ_CORRUPTED
  94.  *        if OVERFLOW is set it seems ioctl QUIOCSERVICED should be called 
  95.  *        to notify the kernel.
  96.  * events where the kernel sticks the events.
  97.  */
  98. struct sharedMemoryInputQueue {
  99.     volatile int head;         /* user's index into events */
  100.         volatile int tail;         /* kernel's index into events */
  101.         volatile unsigned int flags; /* place for out-of-band data */
  102. #define SHMIQ_OVERFLOW  1
  103. #define SHMIQ_CORRUPTED 2
  104.         struct shmqevent events[1];  /* input event buffer */
  105. };
  106.  
  107. /* have to figure this one out */
  108. #define QIOCGETINDX      _IOWR('Q', 8, int)
  109.  
  110.  
  111. /* acknowledge shmiq overflow */
  112. #define QIOCSERVICED     _IO('Q', 3)
  113.  
  114. /* Double indirect I_STR ioctl, yeah, fun fun fun */
  115.  
  116. struct muxioctl {
  117.         int index;        /* lower stream index */
  118.         int realcmd;        /* the actual command for the subdevice */
  119. };
  120. /* Double indirect ioctl */
  121. #define QIOCIISTR        _IOW('Q', 7, struct muxioctl)
  122.  
  123. /* Cursor ioclts: */
  124.  
  125. /* set cursor tracking mode */
  126. #define QIOCURSTRK      _IOW('Q', 4, int)
  127.  
  128. /* set cursor filter box */
  129. #define QIOCURSIGN      _IOW('Q', 5, int [4])
  130.  
  131. /* set cursor axes */
  132. struct shmiqsetcurs {
  133.         short index;
  134.         short axes;
  135. };
  136.  
  137. #define QIOCSETCURS     _IOWR('Q',  9, struct shmiqsetcurs)
  138.  
  139. /* set cursor position */
  140. struct shmiqsetcpos {
  141.         short   x;
  142.         short   y;
  143. };
  144. #define QIOCSETCPOS     _IOWR('Q', 10, struct shmiqsetcpos)
  145.  
  146. /* get time since last event */
  147. #define QIOCGETITIME    _IOR('Q', 11, time_t)
  148.  
  149. /* set curent screen */
  150. #define QIOCSETSCRN     _IOW('Q',6,int)
  151.  
  152.  
  153. /* -------------------- iDev stuff -------------------- */
  154.  
  155. #define IDEV_MAX_NAME_LEN 15
  156. #define IDEV_MAX_TYPE_LEN 15
  157.  
  158. typedef struct {
  159.         char            devName[IDEV_MAX_NAME_LEN+1];
  160.         char            devType[IDEV_MAX_TYPE_LEN+1];
  161.         unsigned short  nButtons;
  162.         unsigned short  nValuators;
  163.         unsigned short  nLEDs;
  164.         unsigned short  nStrDpys;
  165.         unsigned short  nIntDpys;
  166.         unsigned char   nBells;
  167.         unsigned char   flags;
  168. #define IDEV_HAS_KEYMAP        0x01
  169. #define IDEV_HAS_PROXIMITY     0x02
  170. #define IDEV_HAS_PCKBD         0x04
  171. } idevDesc;
  172.  
  173. typedef struct {
  174.     char *nothing_for_now;
  175. } idevInfo;
  176.  
  177. #define IDEV_KEYMAP_NAME_LEN 15
  178.  
  179. typedef struct {
  180.         char name[IDEV_KEYMAP_NAME_LEN+1];
  181. } idevKeymapDesc;
  182.  
  183. /* The valuator definition */
  184. typedef struct {
  185.         unsigned        hwMinRes;
  186.         unsigned        hwMaxRes;
  187.         int             hwMinVal;
  188.         int             hwMaxVal;
  189.     
  190.         unsigned char   possibleModes;
  191. #define IDEV_ABSOLUTE           0x0
  192. #define IDEV_RELATIVE           0x1
  193. #define IDEV_EITHER             0x2
  194.     
  195.         unsigned char   mode;    /* One of: IDEV_ABSOLUTE, IDEV_RELATIVE */
  196.     
  197.         unsigned short  resolution;
  198.         int             minVal;
  199.         int             maxVal;
  200. } idevValuatorDesc;
  201.  
  202. /* This is used to query a specific valuator with the IDEVGETVALUATORDESC ioctl */
  203. typedef struct {
  204.         short                   valNum;
  205.         unsigned short          flags;
  206.         idevValuatorDesc        desc;
  207. } idevGetSetValDesc;
  208.  
  209. #define IDEVGETDEVICEDESC    _IOWR('i', 0,  idevDesc)
  210. #define IDEVGETVALUATORDESC     _IOWR('i', 1,  idevGetSetValDesc)
  211. #define IDEVGETKEYMAPDESC    _IOWR('i', 2,  idevKeymapDesc)
  212. #define IDEVINITDEVICE        _IOW ('i', 51, unsigned int)
  213.  
  214.  
  215. #ifdef __KERNEL__
  216.  
  217. /* These are only interpreted by SHMIQ-attacheable devices and are internal
  218.  * to the kernel
  219.  */
  220. #define SHMIQ_OFF        _IO('Q',1)
  221. #define SHMIQ_ON         _IO('Q',2)
  222.  
  223. void shmiq_push_event (struct shmqevent *e);
  224. int get_sioc (struct strioctl *sioc, unsigned long arg);
  225. #endif
  226.